在多开excel文档的情况下如何分别输出进程标题

动作需求 · 1559 次浏览
坚强的土豆泥 创建于 2024-06-11 22:51

工作上有这样的需求:同时打开A、B、C三个文档,对A文档中列出的3个姓名在B文档中检索,并将3个姓名对应的得分分别拷贝粘贴至A文档中。

目前想到的实现方案是在A文档中选择姓名,利用quicker打开B文档,并在B文档中搜索,但目前无法解决的是在用quicker搜索第二个姓名的时候判断B文档是否已经打开。

目前尝试过使用“检查程序已启动/获取进程信息”输出“主窗口标题”来判断,但仅显示在最上面一层的excel文档标题,请问有什么方法可以解决我的需求。谢谢!


回复内容
52夏天 2024-06-12 01:50
#1

个人思路:

先获取 窗口句柄,然后用窗口句柄打开。

CL 2024-06-12 07:12
#2

这个我感觉应该直接通过Excel的功能来实现,可以搜下VLookup的文档看看。FromGPT


是的,VLOOKUP函数是支持跨文档操作的。你可以在Excel中使用VLOOKUP函数来实现从一个文档查找值并将其复制到另一个文档的需求。以下是详细的步骤和示例:


### 假设

- A文档的Sheet1中,姓名列表在A列。

- B文档的Sheet1中,姓名在A列,得分在B列。


### 步骤

1. **打开A和B两个文档**:确保两个文档同时打开。

2. **在A文档中使用VLOOKUP函数**:


在A文档中,假设你希望将得分填充到B列中。你可以在B2单元格中输入以下公式:


```excel

=VLOOKUP(A2, [B.xlsx]Sheet1!$A$2:$B$100, 2, FALSE)

```


### 解释

- `A2`:这是你在A文档中要查找的姓名。

- `[B.xlsx]Sheet1!$A$2:$B$100`:这是你在B文档中查找的区域。确保B文档已经打开,否则你需要使用文件的完整路径。

- `2`:这是你要返回的列号,在本例中是得分所在的B列。

- `FALSE`:表示精确匹配。


### 示例

假设你有以下数据:


**A文档 (A.xlsx):**

| A 列 (姓名) | B 列 (得分) |

|------------|------------|

| 张三       |            |

| 李四       |            |

| 王五       |            |


**B文档 (B.xlsx):**

| A 列 (姓名) | B 列 (得分) |

|------------|------------|

| 张三       | 90         |

| 李四       | 85         |

| 赵六       | 88         |


在A文档的B2单元格中输入公式:

```excel

=VLOOKUP(A2, [B.xlsx]Sheet1!$A$2:$B$100, 2, FALSE)

```

然后向下拖动填充,结果将如下:

**A文档 (A.xlsx):**

| A 列 (姓名) | B 列 (得分) |

|------------|------------|

| 张三       | 90         |

| 李四       | 85         |

| 王五       | #N/A       |


### 注意事项

1. 确保B文档已打开,否则VLOOKUP公式将无法找到数据源。

2. 如果文件路径或名称包含空格或特殊字符,路径需要用单引号括起来,例如:`'[C:\path to file\B.xlsx]Sheet1'!$A$2:$B$100`。

3. 如果找不到匹配的值,VLOOKUP将返回`#N/A`。可以使用`IFERROR`函数来处理错误,例如:

    ```excel

    =IFERROR(VLOOKUP(A2, [B.xlsx]Sheet1!$A$2:$B$100, 2, FALSE), "Not Found")

    ```


这种方法可以实现跨文档的数据查找和复制,而无需编写VBA代码。

坚强的土豆泥 2024-06-12 10:24
#3

通过句柄打开这个功能我知道的,但是怎样在第二次对做已经打开B.xlsx句柄的初始化不知道应该怎么实现。

是否可以对已经打开excel进程的所有窗口进行遍历,并输出每个窗口名称,通过激活窗口名称来查询内容。


EC10010 回复 坚强的土豆泥 2024-06-13 09:02 :

窗口名称叫工作簿名称,获取和激活都可以用VBA实现。

回复主贴