小编Jvd*_*vdV的帖子

Cells.Find() 引发“运行时错误 91:对象变量或块未设置”

我想要什么: 我有很多带有不同设备的床单。让我们称这些工作表之一为“WS1”。

我有一个单独的表格,其中包含所有现有设备和旁边的相应操作系统。我们称之为“列表”。

现在我希望其他工作表(例如“WS1”)检查“列表”,找到正确的设备,并将正确的操作系统复制到 WS1 工作表中。

手动方式是:

  • 选择 WS1 的单元格“C3”并复制它。
  • 打开“列表”-工作表并找到复制的条目
  • 选择找到的条目左侧的单元格并复制它
  • 再次打开 WS1,选择活动单元格右侧的左侧单元格并粘贴新的剪贴板(其中包含操作系统)
  • 选择活动单元格下方和右侧的下一个单元格。
  • 循环直到 WS1 中的每个设备都装满了一个操作系统

到目前为止我所得到的:

Dim DataObj As New MSForms.DataObject
Dim strCliBoa As String
'strCliBoa = DataObj.GetText
DataObj.GetFromClipboard

Range("C3").Select
Selection.Copy
strCliBoa = DataObj.GetText
Sheets("list").Select
Range("A1").Select
Cells.Find(What:=strCliBoa, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=True, SearchFormat:=False).Activate
ActiveCell.Offset(0, -1).Select
Selection.Copy
strCliBoa = DataObj.GetText
Sheets("WS1").Select
ActiveCell.Offset(0, -1).Select
ActiveSheet.Paste
ActiveCell.Offset(1, 1).Select
Run Code Online (Sandbox Code Playgroud)

我的问题: “运行时错误 91:对象变量或块变量未设置”,它标记了 cell.find-method。

有人能告诉我我做错了什么吗?^^ 提前致谢!

(哦,差点忘了:我在 Win7 上使用的是 ms excel 2010)

excel vba

5
推荐指数
1
解决办法
8328
查看次数

用字符串变量替换字符串-错误91

背景

最近,我回答了一个问题,其中涉及在寻找一个文件的属性。最终,我提出的代码运行良好,但是有一点让我感到困惑。

问题

我想在两行中用一个变量替换一个字符串(在我看来是这样),更具体地说,请尝试以下操作:

Sub TestForSO()

Dim oDir As Object: Set oDir = CreateObject("Shell.Application").Namespace("C:\Users\...\")
Debug.Print oDir.GetDetailsOf(oDir.Items, 1)

End Sub
Run Code Online (Sandbox Code Playgroud)

将路径名替换为包含excel文件的目录,它应该可以正确返回属性值。

现在,当我尝试用变量替换完整路径时,以下内容会在debug.print行上引发“运行时错误91:对象变量或未设置块变量”:

Sub TestForSO()

Dim MainPath As String: MainPath = "C:\Users\...\"
Dim oDir As Object: Set oDir = CreateObject("Shell.Application").Namespace(MainPath)
Debug.Print oDir.GetDetailsOf(oDir.Items, 1)

End Sub
Run Code Online (Sandbox Code Playgroud)

对我而言,以下功能确实有用:

Sub TestForSO()

Dim MainPath As String: MainPath = "C:\Users\...\"
Dim oDir As Object: Set oDir = CreateObject("Shell.Application").Namespace(CStr(MainPath))
Debug.Print oDir.GetDetailsOf(oDir.Items, 1)

End Sub
Run Code Online (Sandbox Code Playgroud)

我不了解其本质上的区别,因为下面的代码将通过“ Watches”给出相同的结果:

Sub test()

Dim check1 As String, check2 As String …
Run Code Online (Sandbox Code Playgroud)

string excel vba namespaces

5
推荐指数
1
解决办法
127
查看次数

自动筛选-使用SpecialCells

背景:

我已经申请了很多次AutoFilter,但从未真正问过自己为什么有时会如此运作。有时,处理过滤后的数据的结果可能会造成混乱,尤其是在SpecialCells发挥作用时。

让我详细说明以下情形:


测试数据:

| Header1 | Header2 |
|---------|---------|
| 50      |         |
| 10      |         |
| 30      |         |
| 40      |         |
| 20      |         |
Run Code Online (Sandbox Code Playgroud)

代码1-普通AutoFilter

With Sheets("Sheet1").Range("A1:B6")
    .AutoFilter 1, ">50"
        .Columns(2).Value = "Check"
    .AutoFilter
End With
Run Code Online (Sandbox Code Playgroud)

这将起作用(即使不使用SpecialCells(12)),但也会填充B1

在此处输入图片说明 在此处输入图片说明


代码2-使用.Offset

为了防止上述行为,我们可以这样实现Offset

With Sheets("Sheet1").Range("A1:B6")
    .AutoFilter 1, ">50"
        .Columns(2).Offset(1).Value = "Check"
    .AutoFilter
End With
Run Code Online (Sandbox Code Playgroud)

但是,这现在将填充我们的数据cell下方的行B7

在此处输入图片说明 在此处输入图片说明


代码3-使用.Resize

为了防止.Offset填充,B7 …

excel vba autofilter

5
推荐指数
2
解决办法
423
查看次数

不区分大小写的正则表达式 - VBA

背景:

刚才,我正在回答一个问题,并在玩弄RegExVBA。目标是创建存在于字符串中的名称列表。RegExVBA首选解决方案,因为我们希望防止偶然发现看起来相似的标点符号和子字符串,例如:JackJacky


样本数据:

让我举一个简单的例子。想象一下我们有一个像这样的字符串:

Dim str As String: str = "Jack's turn, Becky's or Frank?"
Run Code Online (Sandbox Code Playgroud)

我们想知道字符串中提到了某个数组中的哪些名称,例如:

Dim arr As Variant: arr = Array("Jack", "Frank")
Run Code Online (Sandbox Code Playgroud)

示例代码:

为了防止对数组进行迭代,我使用了以下代码:

Sub Test()

Dim str As String: str = "Jack's turn, Becky's or Frank?"
Dim arr As Variant: arr = Array("Jack", "Frank", "Beth")
Dim regex As Object: Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "\b(" & Join(arr, "|") & ")\b"
regex.Global = True

Set …
Run Code Online (Sandbox Code Playgroud)

regex arrays excel vba

5
推荐指数
1
解决办法
1878
查看次数

对 Excel 单元格中的数字求和(长字符串和短字符串)

我正在从事与频率相关的研究。

我想对每个单元格中的所有数字求和,并将它们减少为单个数字。

有些单元格有 2 个数字,有些则有 13 个数字。像这些..

24.0542653897891
25.4846064424057
27
28.6055035477009
Run Code Online (Sandbox Code Playgroud)

我尝试了几个公式来做到这一点。最好的有我 2 位数字,我无法再次求和得到一个结果。

像这些公式:

=SUMPRODUCT(MID(SUBSTITUTE(B5,".",""),ROW(INDIRECT("1:"&LEN(B5)-1)),1)+0)
=SUMPRODUCT(1*MID(C5,ROW(INDIRECT("1:"&LEN(C5))),1))
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?先感谢您。

excel excel-formula

5
推荐指数
1
解决办法
411
查看次数

在 VBA 或 Excel 中,如果数组包含该值,我如何遍历数组并用 1 填充某些单元格,如果不包含该值则用 0 填充?

我从 Wix 收到一个数组,其中包含用户通过表单选择的课程。

从 Wix 接收的数组示例,其中用户选择了 2 门课程。这个数组被放置在一个单元格中。

["VBA","Django"]
Run Code Online (Sandbox Code Playgroud)

上面的数组放置在我的 excel 文件中的一个单元格中,我从这里将单元格变为红色并用课程填充 VBA 数组:

Dim data() As Variant
    Dim arrStr As String
    Dim dataItems As Long
    Dim i As Long
    Dim IndividualCourses(1 To 9) As String

    arrStr = Range("T3")
    arrStr = Replace(Replace(arrStr, "[", "{"), "]", "}")
    data = Application.Evaluate(arrStr)
    dataItems = Application.CountA(data)
    For i = 1 To dataItems
        IndividualCourses(i) = data(i)
    Next i
Run Code Online (Sandbox Code Playgroud)

但用户可以选择 1 到 10 门课程。所有课程的数组:

["JS","Python","VBA","Java","Spring","C++","C#",".NET","Django","CSS"]

我想根据从 Wix 收到的数组,将 1 放在数组中存在的课程的单元格中,将 0 放在其他课程中。

例如,这个课程选择了["VBA","Django"],它应该在VBA单元格中放置1,在Django单元格中放置1,在剩余课程单元格中放置0,因为我想看看用户选择了哪些课程.

这个复杂的问题有什么想法吗?!?

excel vba excel-formula dynamic-arrays office365

5
推荐指数
1
解决办法
132
查看次数

您可以在不嵌套的情况下对许多值使用 SUBSTITUTE 吗?

有没有办法一次交换多个字符串实例而不嵌套?

例如,假设我想从字符串中删除以下值的所有实例:

  • 目标
  • 沃尔玛
  • CVS

输入字符串: “我去了 Target 而不是沃尔玛,但我真的想去 CVS”
输出字符串: “我去了而不是但我真的想去”


我尝试了输入=SUBSTITUTE(A1,H1:H3,"")在哪里以及要替换的字符串,但这仅交换第一个字符串A1H1:H3

我知道如何在 VBA 中执行此操作,但该项目无法使用 VBA

excel excel-formula

5
推荐指数
2
解决办法
1861
查看次数

仅连接大写字母?

在 Excel (2021) 中,我有一个包含单词的单元格:

all Upper case LeTters supposed to be In result
Run Code Online (Sandbox Code Playgroud)

我需要结果:

ULTI
Run Code Online (Sandbox Code Playgroud)

如果没有 VBA(即纯 Excel 函数),我该如何做到这一点?

我搜索过,但“大写”和“连接”函数都导致连接并变为大写,而不是相反:连接 IF 大写。

虽然我找到了一个,但它看起来相当丑陋,我认为(希望)有更好的解决方案:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(txt,"a",""),"b",""),"c",""),"d",""),"e",""),
"f",""),"g",""),"h",""),"i",""),"j",""),"k",""),"l",""),"m",""),"n",""),"o",""),
"p",""),"q",""),"r",""),"s",""),"t",""),"u",""),"v",""),"w",""),"x",""),"y",""),
"z","")," ","")
Run Code Online (Sandbox Code Playgroud)

excel excel-formula

5
推荐指数
1
解决办法
291
查看次数

来自一维数组的唯一值,无需迭代

冒着成为话题的风险,我决定分享一些问答式的代码。如果一般意见认为这将是题外话,我很乐意在需要时删除。


背景

我们可以从任何一维数组或Range变成一维数组的对象中检索所有唯一值,而不必遍历其元素吗?就我而言,普遍的共识是必须迭代不同的元素,最好的方法是使用字典或集合来存储唯一值。是我发现非常有效的方法为了这个目的。


那么如何从一维数组中检索唯一元素,例如:

Dim arr As Variant: arr = Array("A", "A", "C", "D", "A", "E", "G")
Run Code Online (Sandbox Code Playgroud)

结果数组在哪里:

{"A", "C", "D", "E", "G"}
Run Code Online (Sandbox Code Playgroud)

arrays excel vba unique filter

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

搜索文本并对找到的文本使用特定公式

我有一张这样的桌子

\n

要查找的文字

\n

左侧:我在单元格中查找的文本列表。右边:我将根据我找到的文本使用公式。该公式对于文本提取是必需的(这与我找到的文本不同)。

\n

问题是:如何在一个单元格中搜索此文本列表,然后返回要使用的关联公式?

\n

编辑:我正在寻找什么:\n在此输入图像描述

\n

正如你所看到的,我每行都有随机文本,我想提取特定的内容。由于 Excel 的限制,我无法使用 If..if..if..。

\n

输入:

\n

lrh34gero egepjpj I28595474 erqm567goh

\n

gerlkq $ONE-234556 ethrh3444rzh

\n

zrlthk 4555 njwhv \xc3\xb9pbozj LFO-FIN-25436545

\n

excel find excel-formula office365

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