将数据导出到新的工作簿,而不管VBA中的语言设置如何

问题描述:

我有一个代码,用于从当前工作簿(多个工作表)收集数据并将数据以预定义方式导出到新工作簿。将数据导出到新的工作簿,而不管VBA中的语言设置如何

问题:我用英文编写了我的代码,所以我引用了一些名称(如Sheet1)的输出表。但是,我希望此代码在其他语言首选项的Excel中可用(例如tabela1,tabelle1 ...)。如果我参考“Sheet1”,当用户使用不同的语言设置excel时,新创建的工作簿将具有不同名称的工作表。

问题:我该如何解决这种情况?

已经尝试过:代替原来的:

w2.Sheets("Sheet1").Range... 

我试着使用:

w2.Worksheets(1).Range... 

但显然不起作用(下标超出范围错误)

Obs1:我也尝试添加一个新的工作表到新的工作簿中,并指定了一个nam e,并将代码保留为原始代码,但这种方法并不优雅。

Obs2:代码的相关部分是将标识符,日期和内容数组粘贴到新工作表的位置。

代码:

Function ArrayFiller(arr As Variant, arr0 As Variant, y As String, Optional ind As Boolean) As Variant 
Dim lRow As Long, lColumn As Long 
Dim w2 As Workbook 
Dim w3 As Workbook 
Dim d As Date, d1 As Long, d2 As Long 
Dim CompArray() As Variant 

Workbooks.Add 
Set w2 = ActiveWorkbook 

    For lRow = LBound(arr, 1) To UBound(arr, 1) 
     For lColumn = LBound(arr, 2) + 1 To UBound(arr, 2) 
      If arr(lRow, lColumn) <> "" And arr(lRow, lColumn - 1) = "" Then 

        If arr0(lRow, lColumn) <> "" And arr0(lRow, lColumn) <> "--" Then 
         arr(lRow, lColumn - 1) = arr0(lRow, lColumn) 
          w2.Worksheets(1).Cells(lColumn - 1, lRow).Interior.Color = RGB(255, 0, 0) 

        ElseIf arr0(lRow, lColumn) = "" Or arr0(lRow, lColumn) = "--" Then 
         arr(lRow, lColumn - 1) = arr(lRow, lColumn) 
          w2.Worksheets(1).Cells(lColumn - 1, lRow).Interior.Color = RGB(255, 0, 0) 
        End If 
      End If 
     Next 
    Next 

w2.Sheets("Sheet1").Range("A1").Resize(UBound(arr, 2), UBound(arr, 1)).Value = Application.WorksheetFunction.Transpose(arr) 

Columns(2).EntireColumn.Delete 
Rows(2).EntireRow.Delete 

d = Application.WorksheetFunction.WorkDay(w2.Sheets("Sheet1").Range("A3"), -1) 
w2.Sheets("Sheet1").Range("A2") = d 

w2.SaveAs Filename:=ThisWorkbook.path & "\" & "Output" & y, FileFormat:=6 

CompArray() = w2.Worksheets(1).UsedRange.Value 

w2.Close True 

d1 = UBound(CompArray, 1) 
d2 = UBound(CompArray, 2) 

If ind = True Then 

    Workbooks.Add 
    Set w3 = ActiveWorkbook 

    For lRow = LBound(CompArray, 1) + 1 To UBound(CompArray, 1) 
     For lColumn = LBound(CompArray, 2) + 1 To UBound(CompArray, 2) 
      If CompArray(lRow, lColumn) <> "" And CompArray(lRow, lColumn) <> "--" Then 
       w3.Worksheets(1).Cells(lRow, lColumn).Value = 1 
      Else 
       w3.Worksheets(1).Cells(lRow, lColumn).Value = 0 
      End If 
     Next 
    Next 

Columns(1).EntireColumn.Insert 
Rows(1).EntireRow.Insert 

w3.Sheets("Sheet1").Range("A2:A" & d1 + 1).Value = CompArray 
w3.Sheets("Sheet1").Range("B1").Resize(1, d2).Value = CompArray 

w3.SaveAs Filename:=ThisWorkbook.path & "\OutputComposite", FileFormat:=6 

w3.Close True 

Else 
End If 

End Function 

任何想法?

+0

什么行代码犯错了您发布的命令要小心? – user3598756

+0

当我将其更改为w2.Worksheets(1).Range ... – DGMS89

这工作: Sheets(1).Range("A1").Value = 10

编辑:然而,以这种方式引用到表时,当用户可以改变表

+0

时,它崩溃了每一行w2.Sheets(“Sheet1”)。Range ...,我怎么还没有呢?非常好,谢谢你的帮助。 – DGMS89