小编Cap*_*ABC的帖子

自动筛选Excel VBA后删除隐藏/不可见行

我想这很简单,但由于某些原因它似乎对我不起作用:(

我有以下代码,它根据我指定的条件自动过滤数据:

Dim lastrow As Long
lastrow = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row

With Sheet2
    .AutoFilterMode = False

    With .Range("A1:AF" & lastrow)
    .AutoFilter
    .AutoFilter Field:=7, Criteria1:="Yes", Operator:=xlFilterValues

    End With
Run Code Online (Sandbox Code Playgroud)

我现在要做的是删除所有不符合条件的Unfiltered(Hidden)行.

我到目前为止尝试过:

Sub RemoveHiddenRows 
Dim oRow As Object 
For Each oRow In Sheets("Sheet2").Rows 
If oRow.Hidden Then oRow.Delete 
Next 
End Sub 
Run Code Online (Sandbox Code Playgroud)

但是这个代码的问题是它只会删除连续隐藏行的每一行,因为即使删除了一行并且所有较低的行都向上移动了一行,每个行都会增加所考虑的行.

如果可能的话,我更喜欢没有循环的东西,有点像相反的东西.SpecialCells(xlCellTypeVisible).EntireRow.Delete

所有帮助将受到高度赞赏.

excel vba excel-vba

12
推荐指数
1
解决办法
3万
查看次数

从工作表中获取图片到Excel Userform

我期待在用户窗体上的Image控件中查看工作表中的图像.

此图像将根据组合框上的值更改.我已将(使用:插入 - >图片)一些图像插入到我的工作簿的"Sheet1"中,并将其命名为"Picture1"和"Picture2".

我创建了以下UserForm:

表格http://im56.gulfup.com/msKyqi.png

这是我尝试使用的代码,以便从工作表加载图像,但不幸的是,目前这不起作用.

Private Sub ComboBox1_Change()

UserForm1.Image1.Picture = LoadPicture(Worksheets("Sheet1").Shapes(ComboBox1.Value))

End Sub

Private Sub UserForm_Initialize()

UserForm1.ComboBox1.Clear
UserForm1.ComboBox1.AddItem "Picture1"
UserForm1.ComboBox1.AddItem "Picture2"

UserForm1.ComboBox1.Value = "Picture1"

UserForm1.Image1.Picture = LoadPicture(Worksheets("Sheet1").Shapes(ComboBox1.Value))

End Sub
Run Code Online (Sandbox Code Playgroud)

每次运行此代码时,我都会收到以下错误:

错误http://im43.gulfup.com/YoWvTp.png

请指教.

excel vba excel-vba

4
推荐指数
1
解决办法
2万
查看次数

从Excel VBA发送电子邮件 - 名称无法识别

我使用以下代码使用outlook从excel发送电子邮件:

Private Sub SendEmail()

  Set OutlookApp = CreateObject("Outlook.Application")
  Set OlObjects = OutlookApp.GetNamespace("MAPI")
  Set newmsg = OutlookApp.CreateItem(olMailItem)

  newmsg.Recipients.Add ("name@domain.com; name2@domain.com; name3@domain.com")

  newmsg.Subject = "Test Mail"

  newmsg.Body = "This is a test email."

  'newmsg.Display

  newmsg.Send

End Sub
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但是当我尝试发送电子邮件时,我从Outlook得到以下错误:

ErrorScreen http://im58.gulfup.com/GRENlB.png

奇怪的是,如果我将新消息打开两三分钟,名称将自动得到解决:

工作http://im74.gulfup.com/qmOYGQ.png

但是这不适合我,因为我不希望在发送之前显示消息.我希望在运行代码后立即发送它.

任何建议或解决方法将不胜感激.

作为旁注:我已经尝试在Outlook中启用"允许逗号作为电子邮件分隔符"选项,然后使用逗号而不是分号,但我仍然面临同样的问题.

更新:

以下是工作代码,根据Dmitry Streblechenko的回答:

Private Sub SendEmail()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OlObjects = OutApp.GetNamespace("MAPI")
    Set OutMail = OutApp.CreateItem(olMailItem)

On Error Resume Next
    With …
Run Code Online (Sandbox Code Playgroud)

excel outlook vba excel-vba

4
推荐指数
1
解决办法
6202
查看次数

Application.FileDialog(msoFileDialogSaveAs),带.pdf作为Filter

我希望让用户选择他们导出的PDF文件的路径和文件名.

我创建了以下内容来显示SaveAs对话框:

Sub Test3()

    Set myFile = Application.FileDialog(msoFileDialogSaveAs)
    With myFile
    .Title = "Choose File"
    .AllowMultiSelect = False
    .ButtonName = "&Save As"
    .initialFilename = "Export"
    .Title = "Save PDF as"
    If .Show <> -1 Then
    MsgBox "You have cancelled"
    Exit Sub
    End If
    FileSelected = .SelectedItems(1)
    End With


    End Sub
Run Code Online (Sandbox Code Playgroud)

FileSelected稍后将值输入pdf导出代码.

我想在上面的FileSave对话框中添加一个过滤器,以便它只显示PDF作为文件保存类型.

目前最终的价值FileSelected是"Driveletter:/ Folder/Name.xlsm ",所以当我将它输入pdf导出时,它会保存带有xlsm扩展名的pdf.

我试过.Filter.Clear,然后.Filters.Add没有太多运气.

任何帮助将非常感谢!

excel vba excel-vba

3
推荐指数
1
解决办法
2万
查看次数

文本框Excel VBA上的文本框文本消失

基本上我有一个我创建的Userform,我想知道是否可以在Userform加载时添加Gray文本,但是一旦用户开始在TextBox中输入文本就会消失:

用户形式http://im34.gulfup.com/rDwF8.png

一旦用户开始输入字体颜色应该变为黑色.

任何帮助,将不胜感激.

excel vba excel-vba

3
推荐指数
1
解决办法
1万
查看次数

奇怪的是大于或小于结果

我面临一个奇怪的问题,真的不确定为什么:(

所以看看下面的内容(所有细胞形成为2 dp的百分比):

表http://im61.gulfup.com/xXpJZu.png

现在这里是Code1:

If Worksheets("Sheet1").Range("A2").Value < Worksheets("Sheet1").Range("B2").Value Then
MsgBox "Yes"
Else
MsgBox "Nope"
End If
Run Code Online (Sandbox Code Playgroud)

结果:正常工作并显示"Nope",因为"Text"一词不能小于数字/百分比.

代码2:

If Worksheets("Sheet1").Range("A2").Value > Worksheets("Sheet1").Range("B2").Value Then
MsgBox "Yes"
Else
MsgBox "Nope"
End If
Run Code Online (Sandbox Code Playgroud)

结果:无法正常工作并显示"是".这就是问题所在.我不明白为什么它认为"文字"这个词大于"10%"或"0.1".

我想了一下问题可能在于单元格的格式化,所以我将其更改为General,然后更改为Text但我仍然得到相同的结果.

另外,最令我惊讶的是,当我输入"<"符号时,它可以正常工作,但在使用">"符号时会给出错误的结果.

我错过了什么?

excel vba excel-vba

2
推荐指数
1
解决办法
1774
查看次数

标签 统计

excel ×6

excel-vba ×6

vba ×6

outlook ×1