【问题标题】:Copy worksheet with specified name to another workbook将指定名称的工作表复制到另一个工作簿
【发布时间】:2023-01-03 13:40:14
【问题描述】:

此宏将具有数字名称的 Excel 工作表复制到另一个 Excel 工作簿。
例如,只有标题为 6 位数字的工作表。例如“140655”。

我还想复制具有标准英文名称(例如“预算”)的工作表。

Const CalcDelay = 0.00000578704

Dim CopyRange As String
Dim PasteRange As String
Dim ScanFileOpen As Byte
Dim ScanCount As Byte
Dim ScanSaveSpec As String
Dim ScanSaveFile As String
Dim ReturnWindow As String
Dim ReportFile As String
Dim ExcelVersion As String

Sub OpenReportFile()
ReturnWindow = [ProcessWinSpec].Value

If [ReportFileFlag].Value = True Then
    Application.ScreenUpdating = False
    Workbooks.Open Filename:=[ReportFileSpec].Value
    Windows(ReturnWindow).Activate
    Application.ScreenUpdating = True
Else
    MsgBox ("Error: File not found")
End If

End Sub


Sub DoScan()
Dim Work As Variant
Dim X As Interger

ReturnWindow = [ProcessWinSpec].Value
ReportFile = [ReportFileName].Value

ExcelVersion = IIf([FileNameExt].Value = ".xls", 2003, 2013)

For Each Work In [ScanFlags]

    ScanFileOpen = 0
    ScanCount = 0

    If Work.Value = 1 Then

        [ScanName].Value = Work.Offset(0, 1).Value
        [ScanCalcRange].Calculate
        ScanSaveFile = [ScanFile].Value
        ScanSaveSpec = [ScanSpec].Value

        For X = Work.Offset(0, 2).Value To 1 Step -1
            ScanTabName = Work.Offset(0, X + 2).Value
            [ScanTab].Value = ScanTabName
            [ScanCalcRange].Calculate
            If [ReadFlag].Value = 1 Then DoCopyTab
        Next
    End If
    If ScanFileOpen = 1 Then
        ActiveWorkbook.Save
        ActiveWindow.Close
    End If

Next

End Sub

【问题讨论】:

  • SO 不是免费的代码编写服务。一旦您努力自己做出这些改变并遇到困难,我们将非常乐意提供帮助。当发生这种情况时,您可以解释您遇到的问题,以 minimal reproducible example 的形式包括代码的相关部分,并提出与该代码相关的具体问题,我们会尽力提供帮助。如果您无法做到这一点,请聘请承包商为您制作。
  • 如果很难看出您发布的代码与描述的关系,尤其是在过度使用方括号的情况下
  • @KenWhite 有代码,作者正在解释不清楚要完成的内容。我同意这是一个薄弱的问题,但它是可重现的,因为不清楚如何扫描文件中的单词?
  • @pgSystemTester:这是 OP 从某处复制/粘贴获得的代码转储和需求规范。这与张贴空 C main() 存根并询问如何更改它以实际完成任务的家庭作业问题没有任何不同。这个只是发布了别人的代码,并要求我们为他们定制它。
  • @KenWhite 是的,我想你是对的。不过,这比一些努力要好,但我同意你的看法。

标签: excel vba


【解决方案1】:

关于如果文件具有特定名称如何执行宏的问题,最好的方法可能是创建一个单词数组,然后循环遍历它们以寻找匹配项。请参阅您的代码示例:

Sub OpenReportFile()
    Const yourWords = "budget,actual,accept" '<--- fill these in separated by comman
    ReturnWindow = [ProcessWinSpec].Value
    Dim foundMatch As Boolean
    
    If [ReportFileFlag].Value = True Then
        foundMatch = True
    Else
        
        Dim wordArray() As String, i As Long
        wordArray = Split(yourWords, ",")
        
        'loopS through words
        For i = LBound(wordArray) To UBound(wordArray)
            If UCase(wordArray(i)) = UCase([ReportFileFlag].Value) Then
                foundMatch = True
                Exit For 'exits loop after match
            End If
        Next i
    End If
    
    If foundMatch Then
      Application.ScreenUpdating = False
      Workbooks.Open Filename:=[ReportFileSpec].Value
      Windows(ReturnWindow).Activate
      Application.ScreenUpdating = True
    Else
        MsgBox ("Error: File not found")
    End If

End Sub

正如您在 cmets 中看到的那样,就清晰度而言,您的问题没有收到最有利的反馈。如果这不起作用,您可能需要考虑在更仔细地审查How to ask a question后删除您的问题并重新发布

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多