excel VBA工作表操作?

截图中有多个工作表(北京是sheet1、上海是sheet2…重庆是sheet7),每个工作表需要1、将“空”删除行、2、根据“专业类”填写“专业代号”3、根据“性别”生成... 截图中有多个工作表(北京是sheet1、上海是sheet2…重庆是sheet7),每个工作表需要
1、将“空”删除行、
2、根据“专业类”填写“专业代号”
3、根据“性别”生成“称呼”
4、sheet1操作完以上步骤,以后循环操作至sheet8为止
单个工作的表的操作(1-3)是没问题,但是循环1-8的工作(第4点)就卡壳了,
sheets( i - 50 ). select,,,我的这个思路是 i=58 时,则是sheets(8),
因为步幅step -1,sheets最终是sheets(7)
但是这样运行提示是 next 没有for,说明这样写哪里是不对的,或者这整条是错的,而且当i=49至1的时候,也确实想不到办法解决了,
展开
 我来答
boyayes
2021-04-05 · TA获得超过4517个赞
知道大有可为答主
回答量:4231
采纳率:75%
帮助的人:1031万
展开全部

运行提示是 next 没有for,是因为这行If Range("e" & i) = "女" then这行写错了。

应该用If上方加一行Endif,或者将该行的If改为ElseIf

另外,你是先写入代号和称呼之后删行,这样如果是需要删除的行,就多此一举了。

我重新给你写一遍吧:


Sub 操作()

    Dim s%, i% '定义s为整数,i为整数

    For s = 1 To 8 '遍历1至8,步长缺省,会默认为1

        Sheets(s).Select '选中第s张表

        For i = Range("B" & Rows.cout).End(3).Row To 2 Step -1 '遍历B列最大行号至2,步长为-1

            If Range("D" & i) = "" Then

                Rows(i).Delete '删除第i行

            Else

                '代号

                If Range("B" & i) = "理工" Then

                    Range("C" & i) = "LG"

                ElseIf Range("B" & i) = "文科" Then

                    Range("C" & i) = "WK"

                ElseIf Range("B" & i) = "财经" Then

                    Range("C" & i) = "CJ"

                End If

                '称呼

                If Range("E" & i) = "男" Then

                    Range("F" & i) = "先生"

                ElseIf Range("E" & i) = "女" Then

                    Range("F" & i) = "女士"

                End If

            End If

        Next i

    Next s

    MsgBox "处理完毕!", , "提示" '弹出提示

End Sub

匿名用户
2021-04-04
展开全部
你这思路改成这样嘛:
foreach sh in thisworkbook.sheets ‘遍历所有工作表
for i = sh.Cells(sh.Rows.Count, 1).End(xlUp).row to 1 step -1 '自动获取最后一行,倒着处理.
...你的处理代码...
next
next
追问
不好意思哦,因为是小白,跟着B站的视频自学的,今天看到第三课,目前学到的就是for 、if、sheets(批量新增、删除和改名),这个只是通过这三节课的内容进行操作。
foreach是下节课的内容,还没有接触哦,算得上超纲了,
追答
那你可以改成这样:
方法多的很,灵活一点,嘿嘿```

for shNub=1 to thisworkbook.sheets.count ‘遍历所有工作表
set sh=thisworkbook.sheets(shNub)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1陈杭荣
科技发烧友

2021-04-04 · 有一些普通的科技小锦囊
知道小有建树答主
回答量:1954
采纳率:57%
帮助的人:352万
展开全部
提示next没有for是因为每个if如果then后面在下一行,就要end if,还有为什么for 循环i不从1-7要从58减下来?
追问
循环之所以是从后往前,是因为每个工作表中的“姓名”的空需要删除,从后往前删不会出现错误,所以i的数值就设置成58(北京的工作表是有58行)开始
另外每个if 都是有 end if,
第一个工作表操作完自动转为第二个工作表,知道最后一个工作表,这个代码就想不出来怎样操作了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ynzsvt
2021-04-04 · TA获得超过6664个赞
知道大有可为答主
回答量:1.5万
采纳率:40%
帮助的人:2680万
展开全部
双重循环呀。
工作表是套在外的循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式