Vba 新罕布什尔州

Vba 新罕布什尔州,vba,excel,Vba,Excel,把它拆开 Dim Check As Long Check = WorksheetFunction.CountA(Workbooks(FileName1).Sheets(SheetName1).Columns(ColumnNumber)) 如果您的代码运行到该点,您的问题就解决了一半-您在这里遇到了相同的问题,并且您正在再次获取相同的工作簿和工作表对象-相反,分解它,分配局部对象变量,并重用它们: 逐行执行(F8)这段代码,然后您就可以确切地知道是哪条指令在执行。将所有内容塞进尽可能少的代码行中

把它拆开

Dim Check As Long
Check = WorksheetFunction.CountA(Workbooks(FileName1).Sheets(SheetName1).Columns(ColumnNumber))
如果您的代码运行到该点,您的问题就解决了一半-您在这里遇到了相同的问题,并且您正在再次获取相同的
工作簿
工作表
对象-相反,分解它,分配局部对象变量,并重用它们:

逐行执行(F8)这段代码,然后您就可以确切地知道是哪条指令在执行。将所有内容塞进尽可能少的代码行中,并将2、3、4个成员访问链接在一起(假设它“正常工作”),几乎不可能知道这一点


有没有可能以前的代码隐藏了FIleName1的窗口,但后来取消了它的隐藏,这会把事情搞砸?我不得不这么做,因为Excel总是把数据放在错误的工作簿上,除非我把它藏起来

这听起来像是你的代码(在别处?)在
ActiveSheet
,或
ActiveWorkbook
,显式或(更可能?)隐式工作


如果您发现自己使用了非限定的
范围
单元格
名称
调用,那么您就隐式引用了活动工作表。使用要引用的工作表对象,用显式限定的成员调用替换它们。没有魔法,Excel(实际上是VBA)无法猜测你的意图;它不会“一直把数据放在错误的工作簿上”——它会把数据放在你让它放的地方。隐藏工作簿只是一项非常糟糕的工作:您仍然没有明确告诉它要放在哪里。

应用程序中是否已经打开了
Filename1
工作簿?您应该能够使用Watch或Debug在工作簿集合中看到它。
FileName1
SheetName1
都是
String
变量吗?
FileName1
是否仅包含基本文件名(带扩展名),或者该变量中是否也包含完整路径?可能在崩溃的行之前将
Debug.Print FileName1
放入代码中。您将向该过程传递什么?这些参数都是隐式的
变量
,因此它很乐意接受您向它抛出的任何东西。如果这是名称,请将它们定义为字符串。如果要将它们定义为对象,请将它们定义为
工作簿
工作表
对象。明确一点:没有人能够在不做假设的情况下回答这个问题,除非你澄清你为该过程提供了什么。旁注:“文件存在并加载了”是非常模糊的,没有任何实际意义。“在Excel应用程序中打开,并显示为工作表”可能是“显示并加载”的目的,也可能不是。应用程序中是否已打开
Filename1
工作簿?您应该能够使用Watch或Debug在工作簿集合中看到它。
FileName1
SheetName1
都是
String
变量吗?
FileName1
是否仅包含基本文件名(带扩展名),或者该变量中是否也包含完整路径?可能在崩溃的行之前将
Debug.Print FileName1
放入代码中。您将向该过程传递什么?这些参数都是隐式的
变量
,因此它很乐意接受您向它抛出的任何东西。如果这是名称,请将它们定义为字符串。如果要将它们定义为对象,请将它们定义为
工作簿
工作表
对象。明确一点:没有人能够在不做假设的情况下回答这个问题,除非你澄清你为该过程提供了什么。旁注:“文件存在并加载了”是非常模糊的,没有任何实际意义。“在Excel应用程序中打开,并显示为工作表”可能是“显示并加载”的意图,也可能不是“显示并加载”的意图。这对您有好处。不过,我希望您仍能花点时间阅读我的答案,因为您编写代码的方式只会要求发生更多此类错误。修复实际的代码问题,而不仅仅是拼写错误。在您的OP中,您曾说过:“我已经验证了所有文件名和工作表名都存在,并在同一个Excel实例中进行了说明。我已经检查了拼写错误、多余字符和“不可见”字符,但都不存在。”,但是为了帮助你理解为什么Mat的评论如此重要。我们都会犯愚蠢的错误。我们就是这么做的。结构良好的代码将帮助您更快地发现准确的错误,然后您将节省很多时间。这对您有好处。不过,我希望您仍能花点时间阅读我的答案,因为您编写代码的方式只会要求发生更多此类错误。修复实际的代码问题,而不仅仅是拼写错误。在您的OP中,您曾说过:“我已经验证了所有文件名和工作表名都存在,并在同一个Excel实例中进行了说明。我已经检查了拼写错误、多余字符和“不可见”字符,但都不存在。”,但是为了帮助你理解为什么Mat的评论如此重要。我们都会犯愚蠢的错误。我们就是这么做的。结构良好的代码将帮助您更快地发现准确的错误,然后您将节省很多时间。
Sub CopyColumnWidths(FileName1, SheetName1, FileName2, SheetName2)
Private Sub CopyColumnWidths(ByVal FileName1 As String, ByVal SheetName1 As String, ByVal FileName2 As String, ByVal SheetName2 As String)
ColumnNumber = 1
Dim ColumnNumber As Long
ColumnNumber = 1
Dim Check As Long
Check = WorksheetFunction.CountA(Workbooks(FileName1).Sheets(SheetName1).Columns(ColumnNumber))
Dim sourceBook As Workbook
Set sourceBook = Workbooks(FileName1)

Dim sourceSheet As Worksheet
Set sourceSheet = sourceBook.Worksheets(SheetName1)

Check = WorksheetFunction.CountA(sourceSheet.Columns(ColumnNumber))
Workbooks(FileName2).Sheets(SheetName2).Columns(ColumnNumber).ColumnWidth = Workbooks(FileName1).Sheets(SheetName1).Columns(ColumnNumber).ColumnWidth
Dim destinationBook As Workbook
Set destinationBook = Workbooks(FileName2)

Dim destinationSheet As Worksheet
Set destinationSheet = destinationBook(SheetName2)

destinationSheet.Columns(ColumnNumber).ColumnWidth = sourceSheet.Columns(ColumnNumber).ColumnWidth

ColumnNumber = ColumnNumber + 1
Check = WorksheetFunction.CountA(sourceSheet.Range(ColumnLetter & ":" & ColumnLetter))