精华内容
下载资源
问答
  • 我在一个单元格中有一个字符串,让我们说“客户...我有代码来做,但它不知道何时停止循环字符串.它应该在有数字或符号以外的东西时停止,而是继续进行.IsNumber = 1ref = ""If branch = "" Thene = bElsee = b + 1End ...

    我在一个单元格中有一个字符串,让我们说“客户参考:F123456PassPlus”.

    字符串可能在数字前没有字母,数字中可能有符号,字母和数字之间可能有空格.

    我只需要提取数字作为变量.我有代码来做,但它不知道何时停止循环字符串.它应该在有数字或符号以外的东西时停止,而是继续进行.

    IsNumber = 1

    ref = ""

    If branch = "" Then

    e = b

    Else

    e = b + 1

    End If

    f = 1

    While IsNumber = 1

    For intpos = 1 To 15

    ref = Mid(x, e, f)

    f = f + 1

    Select Case Asc(ref)

    Case 45 To 57

    IsNumber = 1

    Case Else

    IsNumber = 0

    Exit For

    End Select

    Next

    IsNumber = 0

    Wend

    之前已经定义了没有定义的任何变量字母,e告诉代码从哪里开始复制,x是包含字符串的单元格.现在,一切正常,它从数字开始并复制它们并将它们构建成一个越来越大的字符串,但它只会在intpos达到15时停止.

    展开全文
  • 循环获取的代码如下,界面中包含了 N个GroupBox ,N 个CheckBox,如遇到GroupBox那么循环跳入继续找CheckBox,直接完成遍历 查找到所有打勾的CheckBox名字 最后 返回 Sub SearchControls(ByRef rControls, ByRef ...
  • For i = MinRow To RetMaxRow - 1 '循环每一行  For j = MinCol To MaxCol - 1 '循环每一列  If Trim(Cells(i, j).Value) = "" Then '判断必填数据是否填写  MsgBox "必填数据"  Cells(i, j).Select  ...

    '检测数据按钮方法,如果检测通过,则保存按钮可用
    Private Sub CheckData_Click()
    GetMaxRow     '首先得到实际数据的最大有效行数
    If RetMaxRow = MinRow Then
        MsgBox "没有任何有效数据"
        Exit Sub
    End If
    For i = MinRow To RetMaxRow - 1     '循环每一行
        For j = MinCol To MaxCol - 1    '循环每一列
            If Trim(Cells(i, j).Value) = "" Then   '判断必填数据是否填写
                MsgBox "必填数据"
                Cells(i, j).Select
                Exit Sub
            End If
           
        Next
    Next                '数据检测通过,给出提示,并使保存按钮可用
    MsgBox "数据效验通过"
    SaveData.Enabled = True

    End Sub

    转载于:https://www.cnblogs.com/yuanweisen/archive/2009/01/06/1370500.html

    展开全文
  • 在单元格区域对象中循环:For Each c In Range("$A$2:$A$" & Cells(Rows.count, "A").End(xlUp).row‘do ...那要如何操作才能既快速,又能按行的要求进行循环遍历呢?答案是:使用数组替代对象,然后在数组中...

    在单元格区域对象中循环:

    For Each c In Range("$A$2:$A$" & Cells(Rows.count, "A").End(xlUp).row

    ‘do something

    Next c

    基于上述代码运行后,你会发现,少量数据处理上还行,但大量数据之后,电脑卡慢,用时较长等缺点就出来了。

    那要如何操作才能既快速,又能按行的要求进行循环遍历呢?

    答案是:使用数组替代对象,然后在数组中循环。

    使用将单元格区域对象的值装入数组,在数组中循环:

    Dim i As Long

    Dim varray As Variant

    varray = Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value

    For i = 1 To UBound(varray, 1)

    ' do something

    Next

    下面是一个完整的例子,此示例仅在列A中符合条件的每个行之后插入一行。在行中,从A2开始,插入期间将+2”添加到变量i中。如果我们用A1启动我们的数组,它将为+1。

    Sub test()

    Dim varray As Variant

    Dim i As Long

    varray = Range("A2:A10").Value

    '必须倒序循环

    For i = UBound(varray, 1) To LBound(varray, 1) Step -1

    '此处放置你自己的条件判断代码等

    If varray(i, 1) = "moo" Then

    Range("A" & i + 2).EntireRow.Insert

    End If

    Next

    End Sub

    logo_28

    发布了13 篇原创文章 · 获赞 7 · 访问量 1万+

    私信

    关注

    标签:Dim,VBA,遍历,End,varray,行中,Range,循环,数组

    来源: https://blog.csdn.net/logo_28/article/details/103943133

    展开全文
  • 您暗示您的代码的早期版本会运行,但不会遍历工作表。原因是: MsgBox ActiveSheet.Name 这将显示活动工作表的名称,但此循环中的任何内容都不会更改活动工作表。 我对你的解决方案不满意,尽管它没有明显的错误。...

    您在问题中显示的代码因以下原因而失败:

    Assets = Array("pipe_mat_tables", "pipe_diam_tables", "pipe_length_tables")

    Assets是一种工作表,它是一种Object,在为对象赋值时必须使用Set:

    Set Assets = Array("pipe_mat_tables", "pipe_diam_tables", "pipe_length_tables")

    这会失败,因为Array("…")不是工作表。

    您暗示您的代码的早期版本会运行,但不会遍历工作表。原因是:

    MsgBox ActiveSheet.Name

    这将显示活动工作表的名称,但此循环中的任何内容都不会更改活动工作表。

    我对你的解决方案不满意,尽管它没有明显的错误。我看到太多的程序失败了,因为程序员在一个语句中做了太多。首先,声明越复杂,首先要做的就越久,在后续维护中理解的时间就越长。有时原来的程序员得到的陈述略有错误;有时维护程序员在尝试更新它时会出错。在每种情况下,程序员花费的额外时间都没有证明运行时的任何节省。

    Alex K已根据VBA的要求重新定义Assets和Asset作为变体,并添加Sheets(Asset).Select以更改哪个工作表处于活动状态,从而修复了您的代码。我不能赞同这一点,因为Select是一个缓慢的陈述。特别是,如果您不包含Application.ScreenUpdating = False,那么当您从每个Select重新绘制屏幕时,您的例程的持续时间可以通过屋顶。

    在解释我的解决方案之前,有一些关于变体的背景知识。

    如果我写:

    Dim I as Long

    I将始终为长整数。

    在运行时,编译器/解释器不必考虑遇到I时的内容:

    I = I + 5

    但是假设我写道:

    Dim V as Variant

    V = 5

    V = V + 5

    V = "Test"

    V = V & " 1"

    这是完全有效(有效但不明智)的代码,因为Variant可以包含数字,字符串或工作表。但是每当我的代码访问V时,解释器必须检查V的当前内容的类型,并确定它是否适合当前情况。这很费时间。

    我不想阻止你在适当的时候使用Variants,因为它们非常有用,但你需要知道它们的开销。

    接下来我希望提倡使用有意义和系统的名称。我根据我多年来使用的系统命名我的变量。我可以查看我的任何程序/宏,并知道变量是什么。当我需要更新12或15个月前编写的程序/宏时,这可以节省时间。

    我不喜欢:

    Dim Assets As Variant

    Assets = Array("pipe_mat_tables", "pipe_diam_tables", "pipe_length_tables")

    因为" pipe_mat_tables"等不是资产;它们是工作表的名称。我会写:

    Dim WshtNames As Variant

    WshtNames = Array("pipe_mat_tables", "pipe_diam_tables", "pipe_length_tables")

    我的第一个提议是:

    Option Explicit

    Sub Test1()

    Dim WshtNames As Variant

    Dim WshtNameCrnt As Variant

    WshtNames = Array("pipe_mat_tables", "pipe_diam_tables", "pipe_length_tables")

    For Each WshtNameCrnt In WshtNames

    With Worksheets(WshtNameCrnt)

    Debug.Print "Cell B1 of worksheet " & .Name & " contains " & .Range("B1").Value

    End With

    Next WshtNameCrnt

    End Sub

    我可以将WshtNameCrnt命名为WshtName,但我被告知名称应至少相差三个字符以避免使用错误的字符而不注意。

    Array函数返回包含数组的变体。 For Each语句的控制变量必须是对象或变体。这就是我将WshtNames和WshtNameCrnt定义为变体的原因。请注意,您的解决方案有效,因为工作表是一个对象。

    我使用了With Worksheets(WshtNameCrnt),这意味着匹配的End With之前的任何代码都可以通过在开头有一个句点来访问此工作表的组件。因此.Name和.Range("B1").Value引用Worksheets(WshtNameCrnt)而不选择工作表。这比任何替代方案都更快更清晰。

    我使用Debug.Print而不是MsgBox,因为它不那么麻烦了。我的代码运行时没有必须为每个工作表按Return,我在立即窗口中有一个整洁的列表,我可以在闲暇时查看。在开发期间,我的代码中经常有很多Debug.Print语句,这就是为什么我输出一个句子而不仅仅是工作表名称或单元格值。

    我的第二个提议是:

    Sub Test2()

    Dim InxW As Long

    Dim WshtNames As Variant

    WshtNames = Array("pipe_mat_tables", "pipe_diam_tables", "pipe_length_tables")

    For InxW = LBound(WshtNames) To UBound(WshtNames)

    With Worksheets(WshtNames(InxW))

    Debug.Print "Cell B1 of worksheet " & .Name & " contains " & .Range("B1").Value

    End With

    Next InxW

    End Sub

    此宏与第一个宏具有相同的效果。我有时会发现For比For Each更方便,尽管在这种情况下我无论如何都看不到任何优势。请注意,即使WshtNames的下限始终为零,我也写了LBound(WshtNames)。这只是我(过度?过度)精确。

    希望这有帮助。

    展开全文
  • 在单元格区域对象中循环: For Each c In Range("$A$2:$A$" & Cells(Rows.count, "A").End(xlUp).row ‘do something ...那要如何操作才能既快速,又能按行的要求进行循环遍历呢?答案是:使用数组替...
  • 由于之后的需求又升级为找脚本方面需要具有适用性,即脚本位于的文件夹的层级不确定,也就是说脚本的位置不确定,经过网上资料的查询即自我的构思,最后写下这篇遍历文件夹下所有的你需要的文件,闲话少说,进入正题...
  • 本文介绍CorelDRAW VBA代码遍历文档、页面或图层中所有对象的相关操作代码,有时候程序可能需要查找页面上的对象,用遍历的方式可实现批量查找、检索对象。 准备文档 创建1个新文档,添加两个页面,在第一个页面...
  • I know VBA in Excel isn't the quickest of things - but I need the most efficient (i.e. quickest) way to loop through a large sample of rows.Currently I have:For Each c In Range("$A$2:$A$" & Cells...
  • VBA循环 + 遍历 的写法 Sub test_arr() 'VBA循环 + 遍历 的写法 arr = Array(1, 2, 3) For i = 0 To 5 Debug.Print (i) Next Debug.Print ("----------------我是分割线------------------") ...
  • 今日给大家讲VBA循环,这个是非常基础的知识,在VBA的相关内容中我也一直在用,也在不断的讲解。今日专门作为一个专题给大家详细地说明,中间也有一些有意思的小例子,供大家玩耍。一FOR NEXT语...
  • 昨天在处理一份销售数据的时候遇到一个小问题,经过思索,编写VBA解决了问题,特此将过程分享给大家,共勉!需求是这样的,下图中A列为省份名称,B列为城市名称,一个省份对应多个城市:现在需要将图1中的数据转换成...
  • VBA遍历数组的2种方式

    万次阅读 2018-12-20 17:26:00
     VBA编程,如何对数组进行遍历? 2.解决方案  方式一:使用for循环 Sub 遍历数组1() '声明一个变量 Dim Arr As Variant '声明一个数字变量 Dim i As Integer '变量类型指定为数组并赋值 Arr = ...
  • VBA遍历文件夹常用有三种方法

    千次阅读 2016-12-17 23:19:22
    VBA遍历文件夹常用有三种方法,这三种方法中,filesearch不适合2007和2010版本,而且速度比较慢,递归法速度也慢。只有用DIR加循环的方法,速度飞快。下面是三种方法的代码: 1、filesearch法 Sub test...
  • VBA遍历文件夹的三种方法(转载)

    万次阅读 2018-02-01 12:45:37
    ">VBA遍历文件夹常用有三种方法,这三种方法中,filesearch不适合2007和2010版本,而且速度比较慢,递归法速度也慢。只有用DIR加循环的方法,速度飞快。下面是三种方法的代码:     1、filesearch法    Sub...
  • 用baidir函数加上循环即可。比du如将D:\ABC文件夹内的所有文件zhi显dao示到zhuanA列,代码如下: Sub遍历所有文件() DimFn$,N% Fn=Dir("D:\ABC\*.*") WhileFn<>"" N=N+1 Range("A"&N)=Fn Fn=Dir Wend End...
  • 【说明】 Do While……Loop循环遍历某列 i = 2 Do While Trim(T_sh.Cells(i, NOTESID_COL)) <> "" If T_sh.Cells(i, KEY_COL) = "KEY" Then End If i = i ...
  • 今日的内容是“VBA之EXCEL应用”的第三章“工作簿(Workbook)和工作表(Worksheet)对象(Object)”中第三节“遍历工作薄和工作表(For Each循环的利用)”。“VBA之EXCEL应用”这套教程从简单的录制宏的讲解,一直到窗体...
  • VBA -excel --遍历

    2016-12-09 17:07:00
    Sub filter1()Rem MsgBox ("AAAAA")Rem 1 get selected zoneRem 2 loop rows and check columnRem 3 if true then hide it   Dim pos, total Rem 获取行数total = Sheet1....Rem 开始循环For pos = ...
  • excel遍历行列的VBA参考

    万次阅读 2017-12-26 14:24:01
    Sub m() Application.DisplayAlerts = False '...For i = Range("A65536").End(3).Row To 2 Step -1 '从最后一行到倒数第二行循环 If Cells(i, "A") = Cells(i - 1, "A") Then '如果上下两个单元格值相同 Range(
  • 学习资源:《Excel VBA从入门到进阶》第49集 by兰色幻想上节学了怎么遍历一个文件夹的文件,那么假设文件夹里还有文件夹,要怎么获取某文件夹下所有文件和子文件夹下的所有文件路径呢?根据之前所学的,一旦定义了...
  • VBA-循环语句总结

    2020-02-13 09:32:22
    for...next 数字循环 for each...next 数组循环或集合遍历 do...loop 循环内容不确定 do until....loop 直到条件成立时,停止循环 do while...loop 当条件成立时,则开始循环 ...
  • Rem 下面的过程遍历指定目录下面的所有文件 Sub SearchFiles(ByVal fd, ByVal fileName1 As String, ByVal fileName2 As String)  Dim fl As File  Dim sfd As Folder  For Each fl In fd.Files '通过循环把...
  • N次修改了,此模块应该比较健壮吧,特点: ...4、一步到位,不用编写2次循环(即先遍历出目录,再遍历文件) Sub searchFile() ' ---------------遍历文件夹内所有文件----------------------------- FileTy...
  • 遍历文件夹中名称不等于自身的表格。 总名单表格为arr 新建的表格为arrnew ,基于公司名称相等。 【问题】 在用循环法给给arrnew数组赋值时候, newarr(i,j)=arr(k,j) arr(k,j)有数值,但arrnew=...

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

vba循环遍历