我有以下代码,这些代码会触发自动给出数字以调整单元格范围内的形状。
<?php
$meta_query = WC()->query->get_meta_query();
$tax_query = WC()->query->get_tax_query();
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'featured',
'operator' => 'IN',
);
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 1,
'meta_query' => $meta_query,
'tax_query' => $tax_query,
);
$featured_query = new WP_Query( $args );
if ($featured_query->have_posts()) {
while ($featured_query->have_posts()) :
$featured_query->the_post();
$product = get_product( $featured_query->post->ID );
$price = $product->get_price_html();
$sales_price_from = get_post_meta( $product->id, '_sale_price_dates_from', true );
$sales_price_to = get_post_meta( $product->id, '_sale_price_dates_to', true );
$sales_price_date_from = date( "j.m.Y", $sales_price_from );
$sales_price_date_to = date( "j.m.Y", $sales_price_to );
$sales_date = '<p class="offer_date">Angebot vom '.$sales_price_date_from.' bis '.$sales_price_date_to.'</p>';
?>
<div class="wochenangebot">
<h2>Wochenangebot</h2>
<div class="wochenangebot_content">
<a href="<?php the_permalink(); ?>">
<h3><?php the_title(); ?></h3>
<?php echo $sales_date; ?>
<?php var_dump($sales_price_to) ?>
<?php the_content(); ?>
</a>
<span class="price"><?php echo $price; ?></span>
<div class="legal-price-info">
<p class="wc-gzd-additional-info">
<span class="wc-gzd-additional-info tax-info variation_modified" style="display: inline;">inkl. MwSt.</span>
<span class="wc-gzd-additional-info shipping-costs-info variation_modified" style="display: inline;">zzgl. <a href="https://nussundgenuss.de/unser-service/" target="_blank">Versandkosten</a></span>
</p>
</div>
<a class="button" href="<?php the_permalink(); ?>">Hol es dir</a>
</div>
<aside>
<?php
if ( has_post_thumbnail( $loop->post->ID ) )
echo get_the_post_thumbnail( $loop->post->ID, 'shop_catalog' );
else
echo '<img src="' . woocommerce_placeholder_img_src() . '" alt="Placeholder" >';
?>
</aside>
</div>
<?php endwhile;
}
?>
我遍历工作表的所有形状,如果它们在Sub numShape()
Dim masqueA As Range
Dim cpt As Integer
Dim shapeTemp As shape
Set masqueA = Range("b33:l42")
cpt = 1
For Each shapeTemp In ActiveSheet.Shapes
If Not Intersect(masqueA, shapeTemp.TopLeftCell) Is Nothing Then
shapeTemp.TextFrame.Characters.Text = cpt
cpt = cpt + 1
End If
Next shapeTemp
End Sub
范围内,我给它们增加数字(1,2,3 ....)。它能满足我的要求。
但是,如果我移动一个形状的位置,例如,我将编号1的形状与编号2的另一个形状交换,然后重新触发上述代码,则这些形状将保留其初始编号。其中使形状编号1放置在编号2之后的形状。
我尝试了不同的方式来重置形状,方法是通过与上述相同的循环:
masqueA
或
shapeTemp.TextFrame.Characters.Text = ""
它将形状文本设置为空,但是当我重新执行shapeTemp.TextFrame.Characters.Text = vbNullString
时,我仍然遇到相同的问题。所以我尝试用:
Sub numShape()
还是同样的问题。
所以我的问题是:
-形状对象如何管理文本?
-我将文本设置为形状的原始方式会导致此问题吗?
干杯!
答案 0 :(得分:0)
您的问题不是形状的文本无法修改-每次调用例程时都会对其进行修改。您只是一次又一次地给他们分配相同的文本。
原因是Shapes
集合按创建顺序返回工作表的形状,而不是其位置。
以下代码循环遍历您范围内的所有单元格(从上至下,从左至右),检查形状是否在该单元格内开始并为其提供下一个数字。
Sub numShape()
Dim masqueA As Range
Dim cpt As Integer
Set masqueA = Range("B33:L42")
cpt = 1
Dim row As Long, col As Long
For row = 1 To masqueA.Rows.Count
For col = 1 To masqueA.Columns.Count
Dim shapeTemp As Shape
For Each shapeTemp In ActiveSheet.Shapes
If Not Intersect(masqueA.Cells(row, col), shapeTemp.TopLeftCell) Is Nothing Then
shapeTemp.TextFrame.Characters.Text = cpt
cpt = cpt + 1
End If
Next shapeTemp
Next col
Next row
End Sub
如果要从左到右排序,请将col
和row
的for循环交换。