所以我把这段代码放在一起,但我在运行它时遇到了麻烦.我试着调用子程序,但什么都没发生.我被困在如何调用我创建的模块上.我还创建了一个MainMenu()子,我想知道这可能是一个错误,我应该从sheet1运行我的MainMenu.也许有人有更好的主意.
我最初的计划是创建一个命令按钮,如果点击了包含MainMenu()的module1将运行.
Sub CommandButton1()
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Run Code Online (Sandbox Code Playgroud)
在module1中,有一个循环运行并调用其他三个模块
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim row_sum As Integer
Sub Main()
'Finding the last row
row_sum = 0
'row check upto 5,000
For k = 1 To 5000
' if cells in k are blank then the row_check = 0, else row_check = 1
If CStr(Cells(k, 1)) = "" Then row_check = 0 Else row_check = 1
'adding …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的函数,根据我传递的参数,我需要返回一个字符串值.我收到错误编译错误:语法错误.
Public Function getServer(env As String) As String
Dim serverName As String
Select Case env
Case "DEV"
serverName = "abc"
Return serverName;
Case "TEST"
serverName = "def"
Return serverName;
Case "Prod"
serverName = "xyz"
Return serverName;
End Select
End Function
Run Code Online (Sandbox Code Playgroud) 我想在我的图表上格式化系列,我注册了宏:
ActiveChart.FullSeriesCollection(1).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(146, 208, 80)
.Transparency = 0
.Solid
End With
Run Code Online (Sandbox Code Playgroud)
然后我把它放到我的代码中:
With Wykres
.ShowLegendFieldButtons = False
.ShowValueFieldButtons = False
.ShowAxisFieldButtons = False
.ShowAllFieldButtons = False
.Legend.Delete
.ChartStyle = 340
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Ilo?? w podziale na województwa"
.SetElement (msoElementDataLabelOutSideEnd)
.Parent.RoundedCorners = True
.ChartArea.Format.Line.ForeColor.RGB = KolorUzytkownika
.FullSeriesCollection.Format.Fill.ForeColor.RGB = KolorUzytkownika
End With
Run Code Online (Sandbox Code Playgroud)
但是我的代码的最后一行出了点问题.我收到消息:"对象不支持此属性或方法".我使用后期绑定,但我想这并不重要.
这是我的代码:
With Worksheets("List of Accounts").ListObjects("ListofAccounts").ListColumns(1).Range
Total_rows_Accounts = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
If Total_rows_Accounts > 1 Then
lbxCurrent.RowSource = "List of Accounts!A2:A4"
End If
Run Code Online (Sandbox Code Playgroud)
我的工作表看起来像什么:
错误:
我之前在Code Review中发布了这个,我想这不是正确的地方.希望这是.
我已经为Excel工作表订单表单的各种操作创建了几十个Subs.每天都有数百个这样做,必须检查很多东西.
例程是当有人打开其中一个工作表时,他们做的第一件事就是运行一个调用其他几个工作表的宏.所以它基本上是这样的:
Sub AllMacros()
Call Macro1
Call Macro2
Call Macro3
Call Macro4
Call Macro5
Call Macro6
Call Macro7
Call Macro8
Call Macro9
Call Macro10
Call Macro11
Call Macro12
Call Macro13
Call Macro14
Call Macro15
Call Macro16
Call Macro17
Call Macro18
Call Macro19
Call Macro20
End Sub
Run Code Online (Sandbox Code Playgroud)
我这样做是因为有时只需要运行其中一个Subs,因此它们将被单独执行.
我的主要问题是:这种技术本身不是一个好主意吗?我知道我没有显示所有代码,但这不是重点.在这里发布的代码太多了.我想我正在寻找共识的答案是"是的,没关系." 或者"不,这样做会更好."
我认为图片是理解我的问题的最简单的方法,这就是为什么我附上一个.我每周都有相同的产品生产顺序(1-10).如果我想要第4周,我会在第3周以下的另一个产品系列进行复制,然后在前面手动添加"4".我知道怎么做copypaste VBA,但我不知道如何通过VBA在前面添加一周.或者有一个公式来实现这一目标?这会更好.
主要逻辑是:每次重复生产序列(1-10)时,周数应增加1.
我已经将一系列单元格从一张纸复制并粘贴到我想要编辑的单元格中.该范围的单元格具有行和列(当然).我希望宏做的是通过D列并检查单元格背景颜色.如果除了白色之外还有背景颜色,我希望宏删除该单元所属的整行.因此,作为最终结果,我希望宏只保留D列中的单元格没有填充或白色背景颜色的行.下面提供的代码按照预期执行该任务,但需要花费很多时间.宏起诉的总行数为700.
我提供了迄今为止我使用过的两种不同类型的代码.它们都需要这么长时间.
代码1
With ws1
lastrow2 = ws1.Range("A" & Rows.Count).End(xlUp).Row
For i = lastrow2 To 2 Step -1
nodel = False
If .Cells(i, "D").Interior.ColorIndex = 2 Then
nodel = True
End If
If .Cells(i, "D").Interior.ColorIndex = -4142 Then
nodel = True
End If
If Not nodel Then
.Rows(i).EntireRow.Delete
End If
Next i
End With
Run Code Online (Sandbox Code Playgroud)
代码2
lastrow2 = ws1.Range("A" & Rows.Count).End(xlUp).Row
For Each cell In ws1.Range("D2:D" & lastrow2)
If Not cell.Interior.ColorIndex = 2 Or cell.Interior.ColorIndex = -4142 Then
If DeleteRange Is …
Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的VBA宏,我针对我在excel中打开的CSV文件运行.此宏格式化工作表,删除某些数据,插入列等.然后将格式正确的CSV复制到将数据导入ERP的服务器.CSV文件是物料清单,一切都很好.我想知道它是否可以简化.当我将这个宏作为excel加载项导入,而不是显示一个宏时,它显示宏中的所有各种子例程,以及按我需要它们运行的顺序调用所有其他子的主子.有没有更好的方法来安排这个代码?
Sub ProcessBOM()
Call DeleteColumn
Call DelBinFill
Call DelBlankRows
Call Insert3Columns
Call DelRow1
Call ClearColumns
Call InsertProjectName
Call InsertLineItemNo
Call InsertEA
Call MoveColumn
Call InsertDate
Call GetUserName
Call SaveAs
Call MessageBox
End Sub
'Delete first column
Sub DeleteColumn()
Columns(1).EntireColumn.Delete
End Sub
'Delete rows containing BIN FILL
Sub DelBinFill()
Dim i As Integer
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) = "BIN FILL" Then Cells(i, 1).EntireRow.Delete
Next i
End Sub
'Delete rows with blank RDI Item …
Run Code Online (Sandbox Code Playgroud) 具体来说,我想删除除工作表的代号Sheet6以外的所有工作表,但是我似乎无法使我的代码正常工作。
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws <> ThisWorkbook.Sheet6 Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next ws
Run Code Online (Sandbox Code Playgroud) 我正在尝试根据金额变化的列条目分配字符串(可能是15-40个条目,具体取决于当天),然后通过将字符串添加到URL的固定开头来打开URL.我的问题是变量的分配.我的代码如下:
'LOOP 1:
'Table Entries
Dim RowCount As Integer
Sheets("Table").Select
Sheets("Table").Range("A2").Select
Do While True
ActiveCell.Offset(1, 0).Select
If IsEmpty(ActiveCell.Value) Then
RowCount = ActiveCell.Row
Exit Do
End If
Loop
RowCount = RowCount - 2
'LOOP 2:
'Assign IDs and URLs
Dim ID(1 To RowCount) As Variant
Dim URL(1 To RowCount) As String
Dim i1 As Integer
For i1 = 1 To RowCount
ID(i1) = Sheets("Table").Range("A" + CStr(i + 1)).Value
URL(i1) = "--Redacted--" + CStr(URL(i1))
Next i1
Run Code Online (Sandbox Code Playgroud)
问题是将ID和URL变量声明为RowCount的函数.我确信还有另一种方式来宣布这些,但我缺乏经验.
提前致谢.