我是VBA的新手,我在为要构建的文件上苦苦挣扎。
我有一个主工作表,它看起来很简单(从B列开始-A是一个空列):
这是仅用于示例的简化版本。工作表的第一张表从B13到O92,第二张表从B104到O114,但其中某些行可能为空。
我的目标是在不同的工作表(Sheet1)中将第一个区域中包含内容的行与第二个区域中包含内容的行连接在一起,并在左侧添加1s和“ Cell 0”(单元格B1的内容)列。使用示例,结果将是这样的:
Sheet1将保持隐藏状态,因为我将其用作其他文件的信息源。实际上,如果我找到一种以其他方式复制信息的方法,则可能不需要1s列-我正在这样做(wsSource为Sheet1):
lRow = wsSource.Columns("A").Find(1, SearchDirection:=xlPrevious, LookIn:=xlValues, LookAt:=xlWhole).Row
wsSource.Range("B1:N" & lRow).Copy
我试图这样做,因此打开文件时Sheet1被“清空”,关闭文件时被编辑-这样,如果添加新行或更新信息,则每次都会进入Sheet1。
我尝试了一些在网上找到的内容,但无法正常工作。我的主要问题是将指定的行一个接一个地添加,但是每次打开文件时我都在努力重置Sheet1,并在关闭文件时自动运行宏。
任何帮助将不胜感激。
答案 0 :(得分:0)
希望这会帮助您入门。 两个子项都需要粘贴在VBE中的ThisWorkBook
下,而不是模块或工作表(n)中。
打开工作簿时,将执行第一个子项。
您确定要在这种情况下清除工作表吗?
您将永远无法访问您的表(没有解决方法),因为它会在每次打开每次时清除。
如果这是您需要的内容,请在工作簿上Sheet1
每次清除以下方法以清除动态范围(Col A-D到Col A中使用的最后一个单元格)包含此代码的位置已打开。
Private Sub Workbook_Open()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim ClearRange As Range
Application.ScreenUpdating = False
With ws
.Visible = xlSheetVisible
.Range("A1:D" & .Range("A" & .Rows.Count).End(xlUp).Row).ClearContents
.Visible = xlSheetHidden
End With
Application.ScreenUpdating = True
End Sub
接下来,下面的子句将仅在书关闭之前执行。这是大部分代码将用于构建表的地方。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
ThisWorkbook.Sheets(1).Visible = xlSheetVisible
'Code goes here
ThisWorkbook.Sheets(1).Visible = xlSheetHidden
Application.ScreenUpdating = True
End Sub
您将需要直接限定对象(范围,单元格等)的质量(哪个工作表),因为代码不会存储在工作表中。第一个子项使用With
块来限定范围,第二个子项直接用ThisWorkbook.Sheets(1).
来限定所有对象
最后,我建议编写代码以在模块内构建表(确认范围!),这样您就可以进行测试和调试,而无需连续关闭/打开书本。在模块中使用了代码之后,您可以将代码直接复制并粘贴到此处的第二个子代码中,您就可以开始了!