【发布时间】:2017-04-16 16:06:52
【问题描述】:
一直在环顾四周,看看我是否能自己找到解决问题的方法,但我做不到......
基本上我正在创建一个用户表单,其中包含 4 个不同的复选框、[4] 个选项按钮和 1 个命令按钮。
第一帧 - Optionbutton5(从 B 列开始),OptionButton6(从 C 列开始)
第二帧 - Optionbutton7(选定的工作表),OptionButton8(所有工作表)
第三帧 - CheckBox1(封面),CheckBox2(Trans_Letter),CheckBox3(缩写)CheckBox3(索引)
此用户表单可帮助我更改活动表或工作簿中所有工作表的行宽和列宽 这个用户表单有 3 个框架:
第 1 帧:选择要更改列宽的列(B 或 C)。
第二帧:选择要在哪个工作表上更改行高和列宽(在活动工作表上或在所有工作表上)
第 3 帧:它有 4 个复选框,其中包含我的工作簿中 4 个工作表的名称。虽然我的工作簿中有近 50 张工作表,但我为这 4 张工作表创建了复选框,因为在需要时我可以选择任何复选框,并且在更改所有工作表的列宽和行高时排除该工作表。
我开发了宏来更改列(B 或 C)和 activesheet 以及所有工作表的列宽和行高,这些宏工作得很好。 直到现在我成功地连接了我的第一帧和第二帧(例如:当我在第一帧中选择“B 列向前”和第二帧中的“所有工作表”时,它正在改变列宽和行高。 现在我想链接我的第三帧,一旦我在第一帧中选择“Column B onwards”,在第二帧中选择“All Sheets”,在第三帧中选择“Cover”,那么它应该改变所有工作表的列宽和行高,除了工作表名称“Cover”。
您能否帮我编写代码,只要任何复选框为 TRUE,那么对于相应的工作表,宏不应该应用,即列和行的高度和宽度发生变化。
模块代码:
Sub rowcolactivesheetb()
Dim exworkb As Workbook
Dim xlwksht As Worksheet
Dim lastrow1 As Long
Dim lastcolumn1 As Long
Dim firstrowDB As Long
With ActiveSheet
lastrow1 = .Cells(Rows.Count, "A").End(xlUp).Row
lastcolumn1 = .Cells(1, Columns.Count).End(xlToLeft).Column
.Range(.Cells(1, 2), .Cells(lastrow1, lastcolumn1)).Select
Selection.Cells.RowHeight = 9.4
Selection.Cells.ColumnWidth = 11.2
End With
End Sub
Sub rowcolallsheetb()
Dim exworkb As Workbook
Dim xlwksht As Worksheet
Dim lastrow1 As Long
Dim lastcolumn1 As Long
Dim firstrowDB As Long
Dim Z As Integer
Dim ShtNames() As String
ReDim ShtNames(1 To ActiveWorkbook.Sheets.Count)
For Z = 1 To ActiveWorkbook.Sheets.Count
ShtNames(Z) = Sheets(Z).Name
Sheets(Z).Activate
lastrow1 = Sheets(Z).Cells(Rows.Count, "A").End(xlUp).Row
lastcolumn1 = Sheets(Z).Cells(1, Columns.Count).End(xlToLeft).Column
ActiveWorkbook.Sheets(Z).Range(Sheets(Z).Cells(1, 2), Sheets(Z).Cells(lastrow1, lastcolumn1)).Select
Selection.Cells.RowHeight = 9.4
Selection.Cells.ColumnWidth = 11.2
Next Z
End Sub
Sub rowcolactivesheetc()
Dim exworkb As Workbook
Dim xlwksht As Worksheet
Dim lastrow1 As Long
Dim lastcolumn1 As Long
Dim firstrowDB As Long
With ActiveSheet
lastrow1 = .Cells(Rows.Count, "A").End(xlUp).Row
lastcolumn1 = .Cells(1, Columns.Count).End(xlToLeft).Column
.Range(.Cells(1, 3), .Cells(lastrow1, lastcolumn1)).Select
Selection.Cells.RowHeight = 9.4
Selection.Cells.ColumnWidth = 11.2
End With
End Sub
Sub rowcolactivesheetc()
Dim exworkb As Workbook
Dim xlwksht As Worksheet
Dim lastrow1 As Long
Dim lastcolumn1 As Long
Dim firstrowDB As Long
With ActiveSheet
lastrow1 = .Cells(Rows.Count, "A").End(xlUp).Row
lastcolumn1 = .Cells(1, Columns.Count).End(xlToLeft).Column
.Range(.Cells(1, 3), .Cells(lastrow1, lastcolumn1)).Select
Selection.Cells.RowHeight = 9.4
Selection.Cells.ColumnWidth = 11.2
End With
End Sub
Sub rowcolallsheetc()
Dim exworkb As Workbook
Dim xlwksht As Worksheet
Dim lastrow1 As Long
Dim lastcolumn1 As Long
Dim firstrowDB As Long
Dim Z As Integer
Dim ShtNames() As String
ReDim ShtNames(1 To ActiveWorkbook.Sheets.Count)
For Z = 1 To Sheets.Count
ShtNames(Z) = Sheets(Z).Name
Sheets(Z).Select
lastrow1 = Sheets(Z).Cells(Rows.Count, "A").End(xlUp).Row
lastcolumn1 = Sheets(Z).Cells(1, Columns.Count).End(xlToLeft).Column
ActiveWorkbook.Sheets(Z).Range(Sheets(Z).Cells(1, 3), Sheets(Z).Cells(lastrow1, lastcolumn1)).Select
Selection.Cells.RowHeight = 9.4
Selection.Cells.ColumnWidth = 11.2
Next Z
End Sub
Sub rowcolallsheetbcover()
Dim exworkb As Workbook
Dim xlwksht As Worksheet
Dim lastrow1 As Long
Dim lastcolumn1 As Long
Dim firstrowDB As Long
Dim Z As Integer
Dim ShtNames() As String
ReDim ShtNames(1 To ActiveWorkbook.Sheets.Count)
For Z = 1 To Sheets.Count
ShtNames(Z) = Sheets(Z).Name
If Sheets(Z).Name <> "Cover" Then
Sheets(Z).Select
lastrow1 = Sheets(Z).Cells(Rows.Count, "A").End(xlUp).Row
lastcolumn1 = Sheets(Z).Cells(1, Columns.Count).End(xlToLeft).Column
ActiveWorkbook.Sheets(Z).Range(Sheets(Z).Cells(1, 2), Sheets(Z).Cells(lastrow1, lastcolumn1)).Select
Selection.Cells.RowHeight = 9.14
Selection.Cells.ColumnWidth = 7.14
End If
Next Z
End Sub
Private Sub CommandButton1_Click()
If Me.OptionButton5.Value = True Then
If Me.OptionButton7.Value = True Then
Call rowcolactivesheetb
End If
End If
If Me.OptionButton6.Value = True Then
If Me.OptionButton7.Value = True Then
Call rowcolactivesheetc
End If
End If
If Me.OptionButton5.Value = True Then
If Me.OptionButton8.Value = True Then
If Me.CheckBox1.Value = True Then
Call rowcolallsheetbcover
Else
Call rowcolallsheetb
End If
End If
End If
If Me.OptionButton6.Value = True And _
Me.OptionButton8.Value = True And _
Me.CheckBox1.Value = False And _
Me.CheckBox2.Value = False And _
Me.CheckBox3.Value = False And _
Me.CheckBox4.Value = False Then
Call rowcolallsheetc
End If
If Me.OptionButton6.Value = True And _
Me.OptionButton8.Value = True And _
Me.CheckBox1.Value = True Then
Call rowcolallsheetccover
End If
If Me.OptionButton6.Value = True And _
Me.OptionButton8.Value = True And _
Me.CheckBox2.Value = True Then
Call rowcolallsheetctransletter
End If
End Sub
【问题讨论】:
-
为了帮助您,我们似乎遗漏了很多代码。在上面的代码 sn-p 中有很多 subs 被调用,我们不知道这段代码做了什么。此外,您在帖子中提到您将附加用户表单(到此帖子?)。但是,我看不到帖子,因此我很难理解这个问题。所述用户表单的屏幕截图可能会有所帮助。但在我看来,基本上你走在正确的轨道上:如果选项按钮是
True,那么应该格式化工作表(就像你在代码中一样)。 -
感谢您更新帖子。现在读起来容易多了。就您的问题而言,由于仍然缺少相关代码,因此很难回答/帮助。我无法确定,因为我无法分辨所有其他宏的内容,尤其是因为我无法猜测
OptionButton的含义(例如,OptionButton6代表什么)。但我假设rowcolallsheetbcover将格式化所有工作表。如果您调整该子的代码以排除您在表单上检查的任何内容,那么您就完成了。所以,基本上你必须编辑宏rowcolallsheetbcover(假设)。 -
我还添加了 rowcollallsheetbcover 代码并对其进行了修改,说明如果工作表名称为“Cover”,则除“Cover”工作表之外的所有工作表中的列宽和行高都应更改
-
尽管修改了 rowcollallsheetbcover 以排除“Cover”表,但它仍然无法正常工作